--- title: "回文日期" created: 2025-11-28 tags: - 算法 --- # 回文日期 ## 题目 [回文日期](https://www.acwing.com/problem/content/468/) ![[image-ecb66fd4.png]] ## 思路分析 枚举每个数 取出合法日期 再对合法日期进行判断 判断是否回文可以用字符串 翻转比较 比如12344321 复制一份 翻转一下12344321 s1=s2 123231 复制一份 翻转一下 132321 s1≠s2 ```cpp #include using namespace std; int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool is_leap(int year){ return year%100 && year%4==0 || year%400==0; } bool check_date(int year,int month,int day) { if(month==0 || month>12) return false; if(day==0 || day>31) return false; int cur_day=days[month]; if(month==2 && is_leap(year)) cur_day++; if(day>cur_day) return false; return true; } int main() { int stdate,eddate; cin>>stdate>>eddate; int cnt=0; for(int date=stdate;date<=eddate;date++){ int year=date/10000,month=date%10000/100,day=date%100; if(check_date(year,month,day)){ string s1=to_string(date); string s2=s1; reverse(s2.begin(),s2.end()); if(s1==s2) cnt++; } } cout< using namespace std; int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; bool is_leap(int year){ return year%100 && year%4==0 || year%400==0; } bool check_date(int year,int month,int day) { if(month==0 || month>12) return false; if(day==0 || day>31) return false; int cur_day=days[month]; if(month==2 && is_leap(year)) cur_day++; if(day>cur_day) return false; return true; } int main() { int stdate,eddate; cin>>stdate>>eddate; int cnt=0; for(int year=stdate/10000;year<=eddate/10000;year++){ string left=to_string(year); string right=left; reverse(right.begin(),right.end()); // string yearstr=left+right; int month=stoi(right.substr(0,2)); int day=stoi(right.substr(2,2)); int date=year*10000+month*100+day; if(date>=stdate && date<=eddate) if(check_date(year,month,day)) cnt++; } cout<